﻿#region

using System.Collections.Generic;
using Frosty.Abilities;
using LazyLib.Combat;


#endregion

namespace DoctorDeath.Spells
{
    public class Damagers
    {
        private readonly List<PAction> _damageActions;
        public AntiMagicShell SpellAntiMagicShell;
        public BloodStrike SpellBloodStrike;
        public BloodTap SpellBloodTap;
        public DarkCommand SpellDarkCommand;
        public DarkTransformation SpellDarkTransformation;
        public DeathCoil SpellDeathCoil;
        public DeathGrip SpellDeathGrip;
        public DeathStrike SpellDeathStrike;
        public EmpowerRuneWeapon SpellEmpowerRuneWeapon;
        public FesteringStrike SpellFesteringStrike;
        public FrostStrike SpellFrostStrike;
        public HeartStrike SpellHeartStrike;
        public HowlingBlast SpellHowlingBlast;
        public HungeringCold SpellHungeringCold;
        public IceboundFortitude SpellIceboundFortitude;
        public IcyTouch SpellIcyTouch;
        public MindFreeze SpellMindFreeze;
        public Obliterate SpellObliterate;
        public Pestilence SpellPestilence;
        public PillarofFrost SpellPillarofFrost;
        public PlagueStrike SpellPlagueStrike;
        public RaiseDead SpellRaiseDead;
        public RuneStrike SpellRuneStrike;
        public RuneTap SpellRuneTap;
        public ScourgeStrike SpellScourgeStrike;
        public Strangulate SpellStrangulate;
        public SuddenDoom SpellSuddenDoom;
        public SummonGargoyle SpellSummonGargoyle;
        public UnholyFrenzy SpellUnholyFrenzy;
        public VampiricBlood SpellVampiricBlood;

        public Racials.ArcaneTorrent SpellArcaneTorrent;
        public Racials.Berserking SpellBerserking;
        public Racials.BloodFury SpellBloodFury;
        public Racials.GiftoftheNaaru SpellGiftoftheNaaru;
        public Racials.WarStomp SpellWarStomp;

        /// <summary>
        /// Initializes a new instance of the <see cref="Damagers"/> class.
        /// </summary>
        /// <param name="damageActions">The damage actions.</param>
        public Damagers(List<PAction> damageActions)
        {
            _damageActions = damageActions;
            SpellAntiMagicShell = new AntiMagicShell(17, "Anti-Magic Shell");
            SpellBloodStrike = new BloodStrike(5, "Blood Strike");
            SpellBloodTap = new BloodTap(27, "BloodTap");
            SpellDarkCommand = new DarkCommand(29, "Dark Command");
            SpellDarkTransformation = new DarkTransformation(40, "Dark Transformation");
            SpellRuneStrike = new RuneStrike(0, "Rune Strike");
            SpellDeathCoil = new DeathCoil(7, "Death Coil");
            SpellDeathGrip = new DeathGrip(30, "Death Grip");
            SpellDeathStrike = new DeathStrike(14, "Death Strike");
            SpellEmpowerRuneWeapon = new EmpowerRuneWeapon(27, "Empower Rune Weapon");
            SpellFesteringStrike = new FesteringStrike(9, "Festering Strike");
            SpellFrostStrike = new FrostStrike(8, "Frost Strike");
            SpellHeartStrike = new HeartStrike(6, "Heart Strike");
            SpellHowlingBlast = new HowlingBlast(11, "Howling Blast");
            SpellHungeringCold = new HungeringCold(12, "Hungering Cold");
            SpellIceboundFortitude = new IceboundFortitude(23, "Icebound Fortitude");
            SpellIcyTouch = new IcyTouch(16, "Icy Touch");
            SpellMindFreeze = new MindFreeze(50, "Mind Freeze");
            SpellObliterate = new Obliterate(10, "Obliterate");
            SpellPestilence = new Pestilence(20, "Pestilence");
            SpellPillarofFrost = new PillarofFrost(25, "Pillar of Frost");
            SpellPlagueStrike = new PlagueStrike(15, "Plague Strike");
            SpellRaiseDead = new RaiseDead(27, "Raise Dead");
            SpellRuneStrike = new RuneStrike(50, "Rune Strike");
            SpellRuneTap = new RuneTap(26, "Rune Tap");
            SpellScourgeStrike = new ScourgeStrike(13, "Scourge Strike");
            SpellStrangulate = new Strangulate(49, "Strangulate");
            SpellSuddenDoom = new SuddenDoom(39, "Death Coil");
            SpellSummonGargoyle = new SummonGargoyle(21, "Summon Gargoyle");
            SpellUnholyFrenzy = new UnholyFrenzy(22, "Unholy Frenzy");
            SpellVampiricBlood = new VampiricBlood(24, "Vampiric Blood");

            SpellArcaneTorrent = new Racials.ArcaneTorrent(75, "Arcane Torrent");
            SpellBerserking = new Racials.Berserking(75, "Berserking");
            SpellBloodFury = new Racials.BloodFury(75, "Blood Fury");
            SpellGiftoftheNaaru = new Racials.GiftoftheNaaru(75, "Gift of the Naaru");
            SpellWarStomp = new Racials.WarStomp(75, "War Stomp");
        }

        /// <summary>
        /// Learns the damagers.
        /// </summary>
        public void LearnDamagers()
        {
            if (SpellAntiMagicShell.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellAntiMagicShell);
            }

            if (SpellBloodStrike.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellBloodStrike);
            }

            if (SpellDarkCommand.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellDarkCommand);
            }

            if (SpellDarkTransformation.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellDarkTransformation);
            }

            if (SpellDeathCoil.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellDeathCoil);
            }

            if (SpellDeathGrip.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellDeathGrip);
            }

            if (SpellDeathStrike.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellDeathStrike);
            }

            if (SpellEmpowerRuneWeapon.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellEmpowerRuneWeapon);
            }

            if (SpellFesteringStrike.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellFesteringStrike);
            }

            if (SpellFrostStrike.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellFrostStrike);
            }

            if (SpellHeartStrike.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellHeartStrike);
            }

            if (SpellHowlingBlast.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellHowlingBlast);
            }

            if (SpellHungeringCold.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellHungeringCold);
            }

            if (SpellIceboundFortitude.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellIceboundFortitude);
            }

            if (SpellIcyTouch.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellIcyTouch);
            }

            if (SpellMindFreeze.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellMindFreeze);
            }

            if (SpellObliterate.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellObliterate);
            }

            if (SpellPestilence.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellPestilence);
            }

            if (SpellPillarofFrost.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellPillarofFrost);
            }

            if (SpellPlagueStrike.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellPlagueStrike);
            }

            if (SpellRaiseDead.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellRaiseDead);
            }

            if (SpellRuneStrike.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellRuneStrike);
            }

            if (SpellRuneTap.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellRuneTap);
            }

            if (SpellScourgeStrike.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellScourgeStrike);
            }

            if (SpellStrangulate.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellStrangulate);
            }

            if (SpellSuddenDoom.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellSuddenDoom);
            }

            if (SpellSummonGargoyle.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellSummonGargoyle);
            }

            if (SpellUnholyFrenzy.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellUnholyFrenzy);
            }

            if (SpellVampiricBlood.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellVampiricBlood);
            }

            if (SpellArcaneTorrent.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellArcaneTorrent);
            }

            if (SpellBerserking.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellBerserking);
            }

            if (SpellBloodFury.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellBloodFury);
            }

            if (SpellGiftoftheNaaru.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellGiftoftheNaaru);
            }

            if (SpellWarStomp.Spell.DoesKeyExist)
            {
                _damageActions.Add(SpellWarStomp);
            }
        }

        /// <summary>
        /// Gives the damage actions.
        /// </summary>
        /// <returns></returns>
        public List<PAction> GiveDamageActions()
        {
            return _damageActions;
        }
    }
}